package com.example.jobseek;

import java.util.Vector;

import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;

import com.example.jobseek.Login.log;
import com.google.gson.Gson;

import domain.EmpresaVO;
import domain.PersonaVO;
import domain.TrabajoVO;
import android.support.v7.app.ActionBarActivity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class BusquedaAvanzada extends ActionBarActivity {

	EditText area;
	EditText ciudad;
	EditText nempresa;
	Button buscar;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_busqueda_avanzada);
		area = (EditText) findViewById(R.id.etArea);
		ciudad = (EditText) findViewById(R.id.etCiudad);
		nempresa = (EditText) findViewById(R.id.etEmpresa);
		buscar = (Button)findViewById(R.id.buscar);
		
		buscar.setOnClickListener(new OnClickListener() {
	        
			@Override
			public void onClick(View arg0) {
				new search().execute(area.getText().toString(), ciudad.getText().toString(), nempresa.getText().toString());  
				
			}});
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.busqueda_avanzada, menu);
		return true;
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		// Handle action bar item clicks here. The action bar will
		// automatically handle clicks on the Home/Up button, so long
		// as you specify a parent activity in AndroidManifest.xml.
		int id = item.getItemId();
		if (id == R.id.action_settings) {
			return true;
		}
		return super.onOptionsItemSelected(item);
	}

	class search extends AsyncTask<String, Void, String> {
		private static final String TAG = "filtrar";
		ProgressDialog progressDialog;

		@Override
		protected void onPreExecute() {
			super.onPreExecute();
			progressDialog = ProgressDialog.show(BusquedaAvanzada.this, "Cargando...",
					"Ingresando", true, true);

		}

		@Override
		protected String doInBackground(String... params) {
			String area_t = params[0];
			String ciudad_t = params[1];
			String nombre_e = params[2];
			String result = "";

			try {
				
				TrabajoVO trabajoVO = new TrabajoVO(area_t, ciudad_t, new EmpresaVO(nombre_e));

				result = buscar(trabajoVO);

				Log.i(TAG, result);

			} catch (Exception e) {
				Log.e(TAG, e.getCause().toString());
			}

			return result;
		}

		@Override
		protected void onPostExecute(String result) {
			super.onPostExecute(result);
			progressDialog.dismiss();

			if ("".equals(result)) {
				Toast.makeText(BusquedaAvanzada.this,
						"Existe problemas de conectividad con el servidor",
						Toast.LENGTH_SHORT).show();
			} else if (result.contains("Error")) {
				Toast.makeText(getApplicationContext(), result,
						Toast.LENGTH_LONG).show();
			} else {
				Bundle b = new Bundle();
				b.putString("datosEmpleos", result);
				Intent i = new Intent(BusquedaAvanzada.this, ResultadoBusqueda.class);
				i.putExtras(b);
				startActivity(i);
				

			}

		}
	}

	public String buscar(TrabajoVO oTrabajoVO) {
		String method = "filtrarEmpleo";
		String TAG = method;
		Log.i("intentando enviar datos al ws usando: ", method);

		try {
			String SOAP_ACTION = util.Constantes.NAMESPACE + "#" + method;
			System.out.println(SOAP_ACTION);
			SoapObject request = new SoapObject(util.Constantes.NAMESPACE,
					method);

			 request.addProperty("area_t", oTrabajoVO.getArea());
			 request.addProperty("ciudad_t", oTrabajoVO.getCiudad());
			 request.addProperty("nombre_e", oTrabajoVO.getEmpresa().getNombre());

			Gson gson = new Gson();
			String trabajo = gson.toJson(oTrabajoVO);
			
			request.addProperty("json", trabajo);

			SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
					SoapEnvelope.VER12);
			envelope.setOutputSoapObject(request);

			// envelope.addMapping(util.Constantes.NAMESPACE, "PersonaVO", new
			// PersonaVO().getClass());

			HttpTransportSE transporte = new HttpTransportSE(
					util.Constantes.URL);
			transporte.debug = true;

			transporte.call(SOAP_ACTION, envelope);

			Log.i(TAG, "dump Request: " + transporte.requestDump);
			Log.i(TAG, "dump Response: " + transporte.responseDump);

			Vector response = (Vector) envelope.getResponse();
			String res = (String) response.get(1);

			return res;

		} catch (Exception e) {
			e.printStackTrace();

		}

		return null;
	}
}
